As a mechanism for accessing data in a tape drive as a file in a file system, for example, LTFS (Linear Tape File System) has been put to practical use. LTFS implements a file system by associating files with meta information such as indices, which indicate where data areas making up the files are located on tape.
Due to the nature of tape, LTFS is designed to add edited data, during editing of a file, to the end of data written in the past without overwriting the past data. This provides the advantage of being able to read data out of a file written in the past. In LTFS, the act of reading past data is referred to as rollback.
A Linear Tape-Open (LTO) Ultrium tape drive available for use by LTFS divides a tape into an index partition mainly used to write indices, and a data partition mainly used to write data. In the data partition, after edited data is added, an index of the data is also added to the end of the edited data. The added index (i.e., the latest index) also includes meta information about one-generation old data and data of earlier generations (i.e., data edited one generation ago and earlier). Also, each index contains information (i.e., a pointer) which identifies a location of a one-generation old index.
Rollback makes it possible to read meta information about data in a file written in the past (i.e., a few generations earlier) based on the latest index on the data partition, identifying the location and the like of data to be read out, and then reading out the data. However, if a file of data of a past generation has already been deleted (logically) in the file system, since the index of data edited after the deletion does not contain meta information about the deleted data, the location and the like of the deleted data cannot be identified directly from the latest index created after the deletion.
In that case, information (a pointer) which identifies the location of the one-generation old index is read out of the latest index, and information (a pointer) which identifies the location of the two-generation old index is read out of the one-generation old index, and so on. Read operations are thus repeated by going back to previous indices to identify the location and the like of the deleted data from the index recorded before the deletion, and thereby the file of the deleted data is read.